home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / grafik / 3d & render tools / irit / contrib / compgrap / basicgeom / bascgeom.irt < prev   
Encoding:
Text File  |  1996-07-16  |  3.7 KB  |  137 lines

  1. #
  2. # Demo for Basic geometry.
  3. #
  4. #                    (c) Gershon Elber, July 1995
  5. #
  6.  
  7. comment $
  8. pause = procedure():
  9.     printf("Press return to continue:", nil());
  10. $
  11.  
  12. save_mat = view_mat;
  13.  
  14. #
  15. # TANGENT of CURVE.
  16. #
  17. Crv = cbspline( 3,
  18.         list( ctlpt( E2, 0.2,  0.0 ),
  19.               ctlpt( E2, 0.2,  0.03 ),
  20.               ctlpt( E2, 0.03, 0.03 ),
  21.               ctlpt( E2, 0.03, 0.07 ),
  22.               ctlpt( E2, 0.04, 0.3 ),
  23.               ctlpt( E2, 0.3,  0.3 ),
  24.               ctlpt( E2, 0.4,  0.4 ),
  25.               ctlpt( E2, 0.3,  0.7 ),
  26.               ctlpt( E2, 0.28, 0.7 ) ),
  27.         list( KV_OPEN ) ) * sc( 2.5 ) * tx( -0.4 ) * ty( -0.9 );
  28. Crv = creparam( Crv, 0, 1 );
  29. attrib( Crv, "dwidth", 3 );
  30. color( Crv, red );
  31.  
  32. DCrv = cDerive( Crv );
  33.  
  34. view_mat = tz( 0.1 );
  35. interact( list( Crv, view_mat ) );
  36.  
  37. Steps = 500;
  38. for ( i = 0, 1, Steps,
  39.     Pt = cEval( Crv, i / Steps ):
  40.     T = normalize( coerce( cEval( DCrv, i / Steps ), vector_type ) ):
  41.     Pt2 = coerce( coerce( Pt, point_type ) + 0.3 * T, E2 ):
  42.     TanVec = Pt + Pt2:
  43.     color( TanVec, yellow ):
  44.     attrib( TanVec, "dwidth", 5 ):
  45.     viewobj( TanVec ) );
  46. pause();
  47.  
  48. #
  49. # NORMAL of SURFACE.
  50. #
  51. Srf = sbspline( 3, 3,
  52.         list ( list( ctlpt( E3, 0.1, 0.0, 1.0 ),
  53.                      ctlpt( E3, 0.3, 1.0, 0.0 ),
  54.  
  55.                      ctlpt( E3, 0.0, 2.0, 1.0 ) ),
  56.                    list( ctlpt( E3, 1.1, 0.0, 0.0 ),
  57.                      ctlpt( E3, 1.3, 1.5, 2.0 ),
  58.                      ctlpt( E3, 1.0, 2.1, 0.0 ) ),
  59.                    list( ctlpt( E3, 2.1, 0.0, 2.0 ),
  60.                      ctlpt( E3, 2.3, 1.0, 0.0 ),
  61.                      ctlpt( E3, 2.0, 2.0, 2.0 ) ),
  62.                    list( ctlpt( E3, 3.1, 0.0, 0.0 ),
  63.                      ctlpt( E3, 3.3, 1.5, 2.0 ),
  64.                      ctlpt( E3, 3.0, 2.1, 0.0 ) ),
  65.                    list( ctlpt( E3, 4.1, 0.0, 1.0 ),
  66.                      ctlpt( E3, 4.3, 1.0, 0.0 ),
  67.                      ctlpt( E3, 4.0, 2.0, 1.0 ) ) ),
  68.         list( list( KV_OPEN ),
  69.               list( KV_OPEN ) ) );
  70. attrib( Srf, "dwidth", 3 );
  71. color( Srf, red );
  72.  
  73. SrfDu = sderive( Srf, ROW );
  74. SrfDv = sderive( Srf, COL );
  75.  
  76. view_mat = save_mat * sc( 0.45 ) * tx( 0.3 ) * ty( 0.2 );
  77. interact( list( view_mat, Srf ) );
  78.  
  79. Steps = 100;
  80. for ( i = 0, 1, Steps,
  81.       u = i / 100:
  82.       v = 3 * sqr( (i - 50) / 50 ):
  83.       Pt = seval( Srf, u, v ):
  84.       Du = normalize( coerce( seval( SrfDu, u, v ), vector_type ) ):
  85.       Dv = normalize( coerce( seval( SrfDv, u, v ), vector_type ) ):
  86.       Nrml = normalize( Dv ^ Du ):
  87.       Ptu = coerce( coerce( Pt, point_type ) + Du * 0.3, e3 ):
  88.       Ptv = coerce( coerce( Pt, point_type ) + Dv * 0.3, e3 ):
  89.       Ptn = coerce( coerce( Pt, point_type ) + Nrml * 0.4, e3 ):
  90.       Vecs = list( Pt + Ptu ):
  91.       snoc( Pt + Ptv, Vecs ):
  92.       color( Vecs, green ):
  93.       attrib( Vecs, "dwidth", 4 ):
  94.       Vec3 = Pt + Ptn:
  95.       color( Vec3, yellow ):
  96.       attrib( Vec3, "dwidth", 5 ):
  97.       view( list( Srf, Vecs, Vec3 ), on ) );
  98. pause();
  99.  
  100. #
  101. # ISOPARAMETRIC CURVE.
  102. #
  103. cross = cbspline( 3,
  104.           list( ctlpt( E3, 0.001, 0.0, 0.02 ),
  105.               ctlpt( E3, 0.2,   0.0, 0.02 ),
  106.             ctlpt( E3, 0.22,  0.0, 0. ),
  107.             ctlpt( E3, 0.22,  0.0, 0.03 ),
  108.             ctlpt( E3, 0.03,  0.0, 0.03 ),
  109.             ctlpt( E3, 0.03,  0.0, 0.07 ),
  110.             ctlpt( E3, 0.04,  0.0, 0.3 ),
  111.             ctlpt( E3, 0.3,   0.0, 0.3 ),
  112.             ctlpt( E3, 0.4,   0.0, 0.4 ),
  113.             ctlpt( E3, 0.3,   0.0, 0.7 ),
  114.             ctlpt( E3, 0.28,  0.0, 0.7 ),
  115.             ctlpt( E3, 0.37,  0.0, 0.42 ),
  116.             ctlpt( E3, 0.31,  0.0, 0.32 ),
  117.             ctlpt( E3, 0.001, 0.0, 0.32 ) ),
  118.           list( KV_OPEN ) );
  119. wglass = surfrev( cross * scale( vector( 1.6, 1.6, 1.6 ) ) );
  120. color( wglass, red );
  121. attrib( wglass, "dwidth", 2 );
  122.  
  123. Iso1 = csurface( wglass, ROW, 7.5 );
  124. Iso2 = csurface( wglass, COL, 0.5 );
  125. color( Iso1, yellow );
  126. color( Iso2, yellow );
  127. attrib( Iso1, "dwidth", 4 );
  128. attrib( Iso2, "dwidth", 4 );
  129.  
  130. view_mat = save_mat * ty( -0.5 );
  131. interact( list( view_mat, wglass, Iso1, Iso2 ) );
  132.  
  133. #
  134. # Srf to polyhedra approximation.
  135. #
  136. interact( list( view_mat, wglass ) );
  137.